package chapter7.recipe1.server;
import io.netty.channel.ChannelHandler;
import io.netty.handler.codec.http2.Http2ConnectionHandler;
import io.netty.handler.codec.http2.Http2OrHttpChooser;
import javax.net.ssl.SSLEngine;
/**
* Negotiates with the browser if HTTP2 or HTTP is going to be used. Once decided, the Netty
* pipeline is setup with the correct handlers for the selected protocol.
*/
public class Http2OrHttpHandler extends Http2OrHttpChooser {
private static final int MAX_CONTENT_LENGTH = 1024 * 100;
public Http2OrHttpHandler() {
this(MAX_CONTENT_LENGTH);
}
public Http2OrHttpHandler(int maxHttpContentLength) {
super(maxHttpContentLength);
}
@Override
protected SelectedProtocol getProtocol(SSLEngine engine) {
String[] protocol = engine.getSession().getProtocol().split(":");
if (protocol != null && protocol.length > 1) {
SelectedProtocol selectedProtocol = SelectedProtocol.protocol(protocol[1]);
System.err.println("Selected Protocol is " + selectedProtocol);
return selectedProtocol;
}
return SelectedProtocol.UNKNOWN;
}
@Override
protected ChannelHandler createHttp1RequestHandler() {
return new HelloWorldHttp1Handler();
}
@Override
protected Http2ConnectionHandler createHttp2RequestHandler() {
return new HelloWorldHttp2Handler();
}
}